# -*- shell-script -*-
#
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
#                         University Research and Technology
#                         Corporation.  All rights reserved.
# Copyright (c) 2004-2005 The University of Tennessee and The University
#                         of Tennessee Research Foundation.  All rights
#                         reserved.
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 
#                         University of Stuttgart.  All rights reserved.
# Copyright (c) 2004-2006 The Regents of the University of California.
#                         All rights reserved.
# Copyright (c) 2006      QLogic Corp. All rights reserved.
# Copyright (c) 2009      Cisco Systems, Inc.  All rights reserved.
# $COPYRIGHT$
# 
# Additional copyrights may follow
# 
# $HEADER$
#

# OMPI_CHECK_PORTALS4(prefix, [action-if-found], [action-if-not-found])
# --------------------------------------------------------
# check if PORTALS4 support can be found.  sets prefix_{CPPFLAGS, 
# LDFLAGS, LIBS} as needed and runs action-if-found if there is
# support, otherwise executes action-if-not-found
AC_DEFUN([OMPI_CHECK_PORTALS4],[
    AC_ARG_WITH([portals4],
        [AC_HELP_STRING([--with-portals4(=DIR)],
             [Build Portals4 support, optionally adding DIR/include, DIR/lib, and DIR/lib64 to the search path for headers and libraries])])
    OMPI_CHECK_WITHDIR([portals4], [$with_portals4], [include/portals4.h])
    AC_ARG_WITH([portals4-libdir],
        [AC_HELP_STRING([--with-portals4-libdir=DIR],
             [Search for Portals4 libraries in DIR])])
    OMPI_CHECK_WITHDIR([portals4-libdir], [$with_portals4_libdir], [libportals.*])

    ompi_check_portals4_$1_save_CPPFLAGS="$CPPFLAGS"
    ompi_check_portals4_$1_save_LDFLAGS="$LDFLAGS"
    ompi_check_portals4_$1_save_LIBS="$LIBS"

    AS_IF([test "$with_portals4" != "no"],
          [AS_IF([test ! -z "$with_portals4" -a "$with_portals4" != "yes"],
                 [ompi_check_portals4_dir="$with_portals4"])
           AS_IF([test ! -z "$with_portals4_libdir" -a "$with_portals4_libdir" != "yes"],
                 [ompi_check_portals4_libdir="$with_portals4_libdir"])

           OMPI_CHECK_PACKAGE([$1],
                              [portals4.h],
                              [portals],
                              [PtlLEAppend],
			      [],
                              [$ompi_check_portals4_dir],
                              [$ompi_check_portals4_libdir],
                              [ompi_check_portals4_happy="yes"],
                              [ompi_check_portals4_happy="no"])],
          [ompi_check_portals4_happy="no"])

    LDFLAGS="$LDFLAGS $portals4_LDFLAGS"
    LIBS="$LIBS $portals4_LIBS"

    CPPFLAGS="$ompi_check_portals4_$1_save_CPPFLAGS"
    LDFLAGS="$ompi_check_portals4_$1_save_LDFLAGS"
    LIBS="$ompi_check_portals4_$1_save_LIBS"

    max_md_size=0
    AC_ARG_WITH([portals4-max-md-size],
      [AC_HELP_STRING([--with-portals4-max-md-size=SIZE],
         [Log base 2 of the maximum size in bytes of a memory descriptor.  Should only be set for implementations which do not support binding all of virtual address space.])])
    AS_IF([test "$with_portals4_max_md_size" = "yes" -o "$with_portals4_max_md_size" = "no"],
          [AC_MSG_ERROR([--with-portals4-max-md-size requires an integer argument])],
          [AS_IF([test -n "$with_portals4_max_md_size"],
                 [max_md_size="$with_portals4_max_md_size"])])
    AC_DEFINE_UNQUOTED([PORTALS4_MAX_MD_SIZE], [$max_md_size],
      [Log base 2 of the maximum size in bytes of a memory descriptor.  Set to 0 if MD can bind all of memory.])

    max_va_size=0
    AC_ARG_WITH([portals4-max-va-size],
      [AC_HELP_STRING([--with-portals4-max-va-size=SIZE],
         [Log base 2 of the maximum size in bytes of the user virtual address space.  Should only be set for implementations which do not support binding all of virtual address space.])])
    AS_IF([test "$with_portals4_max_va_size" = "yes" -o "$with_portals4_max_va_size" = "no"],
          [AC_MSG_ERROR([--with-portals4-max-va-size requires an integer argument])],
          [AS_IF([test -n "$with_portals4_max_va_size"],
                 [max_va_size="$with_portals4_max_va_size"])])
    AC_DEFINE_UNQUOTED([PORTALS4_MAX_VA_SIZE], [$max_va_size],
      [Log base 2 of the maximum size in bytes of the user virtual address space.  Set to 0 if MD can bind all of memory.])

    AS_IF([test \( $max_md_size -eq 0 -a $max_va_size -ne 0 \) -o \( $max_md_size -ne 0 -a $max_va_size -eq 0 \)],
          [AC_ERROR([If either --with-portals4-max-md-size or --with-portals4-max-va-size is set, both must be set.])])
    AS_IF([test $max_md_size -ge $max_va_size],
          [max_md_size=0
           max_va_size=0])
    AS_IF([test $max_md_size -ne 0 -a $max_va_size -ne 0],
          [AC_MSG_NOTICE([Portals 4 address space size: $max_md_size, $max_va_size])])

    AS_IF([test "$ompi_check_portals4_happy" = "yes"],
          [$2],
          [AS_IF([test ! -z "$with_portals4" -a "$with_portals4" != "no"],
                 [AC_MSG_ERROR([Portals4 support requested but not found.  Aborting])])
           $3])
])

